package com.common.utils.constant;

import cn.hutool.core.util.StrUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * 文件类型后缀
 *
 * @author xianggj
 * @Date 2021/6/7 16:44
 **/
public enum FileType {
    /**
     * 文本类型 区分
     */
    TXT("txt", 1),
    PRO("properties", 1),
    SQL("sql", 1),
    JAVA("java", 1),
    PY("py", 1),
    R("r", 1),
    JS("js", 1),
    SH("sh", 1),
    LOG("log", 1),
    POM("pom", 1),
    CSS("css", 1),
    JSON("json", 1),
    XML("xml", 1),
    YAML("yml", 1),
    HTML("html", 1),
    //文档文件
    CSV("csv", 2),
    XLS("xls",2),
    XLSX("xlsx",2),
    DOC("doc",2),
    DOCX("docx",2),
    PPT("ppt",2),
    PPTX("pptx",2),
    PDF("pdf", 2),

    //压缩文件
    AR("ar", 3),
    RAR("rar", 3),
    ARJ("arj", 3),
    ZIP("zip", 3),
    JAR("jar", 3),
    WAR("war", 3),
    TAR("tar", 3),
    GZ("gz", 3),
    BZ2("bz2", 3),
    CPIO("cpio", 3),
    SEVEN_Z("7z", 3),
    //图片文件
    JPG("jpg",4),
    JPEG("jpeg",4),
    JPE("jpe",4),
    PNG("png",4),
    GIF("gif",4),
    BMP("bmp",4),
    ICO("ico",4),
    //音频视频类
    MP3("mp3",5),
    MP4("mp4",5),
    AVI("avi",5),
    WMV("wmv",5),
    WMA("wma",5),
    W4A("w4a",5),
    W4V("w4v",5),
    WOV("wov",5),
    GPG("3gpp",5),
    WEBM("webm",5),
    FLV("flv",5),
    MTS("mts",5),
    MPEG("mpeg",5),
    VOB("vob",5),
    MKV("mkv",5),
    ;

    FileType(String value, int type) {
        this.value = value;
        this.type = type;
    }

    /**
     * 有的文件后缀数字开头
     */
    private String value;
    /**
     * 类型
     * 1: 纯文本文件 能转成字符串查看
     * 2：需要单独转换文件 excel,ppt等
     * 3：压缩文件 jar,zip
     * 4：图片文件 png,jpg
     * 5:其他 需要加上特殊标签就能访问的文件
     * 不支持的文件 不用写在这个枚举中 如MPP 文件
     */
    private int type;

    public String getValue() {
        return value;
    }

    public int getType() {
        return type;
    }


    public boolean isText(){
        return type == 1;
    }

    public boolean isDoc(){
        return type == 2;
    }

    public boolean isZip(){
        return type == 3;
    }
    public boolean isImage(){
        return type == 4;
    }

    public boolean isVideo(){
        return type == 5;
    }


    /**
     * 支持的文件类型
     * @return
     */
    public static List<String> supportLists(){
        List<String> list = new ArrayList<>();
        for (FileType fs : values()) {
            list.add(fs.getValue());
        }
        return list;
    }

    /**
     * 字符串转枚举
     * @return
     */
    public static FileType enumOf(String fileName){
        if (StrUtil.isBlank(fileName)){
            return null;
        }
        String ext = fileName;
        if (fileName.contains(Constants.DOT)){
            ext = StrUtil.subAfter(fileName, Constants.DOT, true);
        }
        for (FileType fs : values()) {
            if (fs.getValue().equalsIgnoreCase(ext)){
                return fs;
            }
        }
        return null;
    }
}
